//#region 基地址
// axios 基地址
// 实际项目开发过程中 最少会存在两个接口服务器
// 开发阶段用的 假数据的接口服务器 http://www.test.com
// 生产阶段用的 真实数据的接口服务器 http://www.api.com
// axios 可以设置一个基地址 http://www.test.com
// 后面写发送请求的代码   可以不带上 基地址 只写最关键的接口部分地址即可

// http://www.itcbc.com:8000/api/login
// 基地址 http://www.itcbc.com:8000
// 关键的接口部分  /api/login

// 设置基地址
//设置 axios全局配置 默认基地址
axios.defaults.baseURL = "http://www.itcbc.com:8000";
//#endregion

//#region 拦截器 显示加载中
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    common.load.show();
    //在发送之前直接添加请求头
    //如果有token就添加
    if (localStorage.getItem("token")) {
        config.headers.authorization=localStorage.getItem("token");       
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // 表示 http状态码 正常的时候就会触发
    // 包含着 业务状态码 正常
    // 包含着 业务状态码 不正常
    toastr.success(response.data.message);
    // 需要我们开发者自己来判断 业务状态码是否正确

    // 当我们code = 0 表示正常 否则就是错误
    // console.log(response);
    common.load.hidden();
    //判断业务状态码正不正确
        // 在使用code之前先判断一下这个code有没有
        // console.log(response.data.code);
        // response.data.code !== undefined 后台返回的数据格式不统一 让后台来修改，但是 前端处理
        if (response.data.code !==undefined && response.data.code !== 0) {
            //状态码错误
            toastr.error(response.data.message);// message 后端返回的错误信息
        
        //实现如果业务码也出错了，不让错误代码继续执行
        return Promise.reject(response);
    }
    
    //return 什么就返回什么
    return response.data;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么

    //响应错误会返回什么
    console.dir(error);

    // 401未登录的情况
    if (error.response.status === 401) {
        //token失效没有携带  没有登录过
        //控制最外面的页面地址跳转
        window.top.location.href = './login.html';
    }
    toastr.error(error.response.data.message);
    common.load.hidden();
    return Promise.reject(error);
});
//#endregion